Network resource modification for higher network connection concurrence

ABSTRACT

Implementations for network resource modification for enabling higher network connection concurrence are disclosed. An example method includes receiving a request from a client for a network resource having references to objects, and retrieving the network resource from one or more servers. The method further includes modifying the network resource to cause the client to open a greater number of concurrent TCP connections to the network appliance than otherwise would have been opened had the network resource not been modified due to a browser program imposed limit on a number of concurrent TCP connections. The method further includes sending the modified network resource to the client, receiving a plurality requests for the objects from the client over the greater number of concurrent TCP connections, and replying to the plurality of requests for the objects by sending the objects to the client over the greater number of concurrent TCP connections.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation of and claims priority to U.S. patentapplication Ser. No. 14/145,059, titled NETWORK RESOURCE MODIFICATIONFOR HIGHER NETWORK CONNECTION CONCURRENCE, filed Dec. 31, 2013, andissued as United U.S. Pat. No. 9,288,261 on Mar. 15, 2016, which is acontinuation of and claims priority to U.S. patent application Ser. No.13/004,894, titled NETWORK RESOURCE MODIFICATION FOR HIGHER NETWORKCONNECTION CONCURRENCE, filed Jan. 12, 2011, and issued as U.S. Pat. No.8,620,999 on Dec. 31, 2013, the contents of each of these applicationsare incorporated herein by reference in their entirety for all purposes.

BACKGROUND

Modern Internet browsers limit the number of concurrent TCP connectionsthat can be opened to a given host or domain to a predetermined limit.In many browsers, this limit has been set to six concurrent connections.One reason for configuring browsers to enforce such a limit is to reduceload on servers, which traditionally have had a difficult time managinglarge numbers of simultaneous TCP connections. Traditional process-basedor thread-based servers, under heavy connection load, devote significantprocessor resources to polling each connection to determine whethertraffic has arrived on that connection. If the load becomes too heavy,servers may experience a phenomenon referred to as response throttling,as the servers become unable to respond to requests since theirprocessors are overly taxed polling connections. The requesting clientssee the server as unresponsive, and requests often “time out” as theserver fails to respond to them.

In recent years event-based web servers, multiplexing Server LoadBalancers, and Application Delivery Controllers have become widelyavailable. These devices can handle tens of thousands or hundreds ofthousands of TCP connections, meaning the servers no longer have to be“protected” from the clients or may operated with less protection fromthe clients. However, as web pages become more complicated, thesebrowser imposed limits on concurrent TCP connections can undesirablyimpair browser performance as perceived by the end user. Many modern webpages are rendered based upon an HTML file that references numerousseparately downloadable objects. It is not uncommon for 50 to 100objects served by the same domain to be referenced by a single HTMLfile, and the browser must download each object to properly or fullyrender the web page. A browser that has received such an HTML fileparses the file and begins generating requests for the objectsreferenced therein. However, requests for these objects must be sentover the limited number of (e.g. 6) concurrent TCP connections in asequential manner. After the first six requests are sent, using the mostcommon limit as an example, subsequent requests must be queued by thebrowser until the responses have been received. This drasticallyunderutilizes available bandwidth, and leads to longer-than-necessarydownload time.

Requests are sent serially over each connection, such that a nextrequest cannot be sent until a prior request has been fully responded toby the server. Large objects that are requested early can thus delaydownloading of later queued object requests. Packet loss and networkcongestion on one or more of the connections can further delay datatransmission, as the TCP protocol automatically slows down data transferrates and slowly builds it up again for the congested connection.Further, the rendering of the web page often cannot begin until a set ofobjects necessary to determine its layout and functionality (e.g.,cascading style sheets and embedded scripts) are downloaded. If theseobjects end up or occur at the end of the queue, the web page may takeeven longer to render. These various factors result in agonizing delayfor users, who stare at incomplete or blank browser pages as the browserchurns and waits, attempting to retrieve the various objects necessaryto render the web page over the limited number of connections. If thewait is too long, users may give up and move on to a different web page.

Websites with who care about end user performance, and/or are equippedwith event based servers or scalable application controllers will wantto increase the number of concurrent TCP connections made by clients sothat more objects downloads can be parallelized, thus reducing theoverall “clock time” from initial page request to completed rendering.

SUMMARY

Implementations for network resource modification for enabling highernetwork connection concurrence are disclosed. As one example, a methodis disclosed for a network appliance connectable to a client device viaa wide area network and one or more server devices via a local areanetwork. The method includes receiving a request from a client devicefor a network resource having a plurality of references to objects, andretrieving the network resource from one or more server devices. Themethod further includes modifying the network resource to cause theclient device to open a greater number of concurrent TCP connections tothe network appliance than otherwise would have been opened had thenetwork resource not been modified due to a browser program imposedlimit on a number of concurrent TCP connections. The method furtherincludes sending the modified network resource to the client device,receiving a plurality requests for the objects from the client deviceover the greater number of concurrent TCP connections, and replying tothe plurality of requests for the objects by sending the objects to theclient device over the greater number of concurrent TCP connections.

Claimed subject matter, however, is not limited by this summary as otherimplementations are disclosed by the following written description andassociated drawings.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1 is a schematic diagram depicting an example system according toone disclosed embodiment.

FIG. 2 is a flow diagram depicting an example method for increasingnetwork connection concurrency according to one disclosed embodiment.

FIG. 3 is a flow diagram depicting an example method according toanother disclosed embodiment.

FIG. 4 is a flow diagram depicting an example method according to yetanother disclosed embodiment.

FIG. 5 depicts an example network resource according to one disclosedembodiment.

FIG. 6 depicts an example of a rewritten network resource of the examplenetwork resource of FIG. 5 according to one disclosed embodiment.

FIG. 7 is a network flow diagram depicting an example response to aninitial client request for a cacheable object according to one disclosedembodiment.

FIG. 8 is a network flow diagram depicting an example response to aninitial client request for a non-cacheable object according to onedisclosed embodiment.

FIG. 9 is a network flow diagram depicting an example response to asubsequent client request for a non-cacheable object according to onedisclosed embodiment.

DETAILED DESCRIPTION

To address the issues identified above, systems and methods are providedaccording to which a greater number of concurrent TCP connections may beopened between a client device and a network appliance than would haveotherwise been opened due to browser imposed concurrent connectionlimits. This is accomplished by rewriting or otherwise modifying thenetwork resource to include one or more different references to objects,or by redirecting the client device to one or more different TCPconnections points from which objects may be obtained. One or more ofthese approaches for increasing the number of concurrent TCP connectionsestablished by a client device to greater than a browser imposed limitfor concurrent requests for objects to a single host or domain mayreduce object fetching time, rendering time, processing time, and/ordelay experienced by the client device.

FIG. 1 is a schematic diagram depicting an example system 100 accordingto one disclosed embodiment. System 100 includes a network appliance 120connected or connectable to a client device 110 via a wide area network140 and one or more server devices such as server devices 152, 154, 156of a data center 150 via a local area network 142. Wide area network 140may comprise the Internet or portion thereof, for example.

Client device 110 may represent an example client device of a number ofclient devices that may be concurrently connected to network appliance120 via wide area network 140. Client device 110 may comprise one ormore processors 112. Client device 110 may comprise mass storage 116 andmemory 114 that may have or include instructions stored thereon, such asbrowser program 118, for example. Instructions such as, for example,browser program 118 may be executed at client device 110 by one or moreprocessors 112. Browser program 118 may be configured to request objectsfrom network appliance 120 or other suitable network server, and may beconfigured to enforce a browser imposed limit on the number ofconcurrent TCP connections that may be made by the browser to a singlehost or domain. Client device 110 may be implemented as a user operablepersonal computer, mobile device, component of an electronic device, orother suitable implementation.

Network appliance 120 may comprise one or more processors 122. Networkappliance 120 may comprise mass storage 126 and memory 124 that may haveor include instructions stored thereon, such as routing program 127, forexample. Instructions such as, for example, routing program 127 may beexecuted at network appliance 120 by one or more processors 122. In atleast one implementation, network appliance may be implemented as aserver/load balancer that provides both server functionality (e.g.,proxying of one or more other servers) and load balancing functionalityfor servers of data center 150, among other suitable functions.Typically, it will be appreciated that the network appliance managesmany client-side TCP connections over WAN 140, and multiplexes clientconnections to a smaller number of server-side TCP connections over theLAN 142, which are typically persistent connections. The networkappliance receives HTTP requests from the various clients over thoseclient-side TCP connections, and then multiplexes those HTTP requestsover appropriate server-side persistent TCP connections. The networkappliance selects a back end server for hosting a session with a remoteclient based on various load balancing factors, including serverresponse time, server processor load, memory usage, etc.

It will be appreciated that the network appliance does not merely routepackets back and forth to the backend servers, but rather acts as a TCPendpoint for client side connections, where the packets are assembledand interpreted as higher level protocol communications, such as HTTPrequests and responses, and then resent over the server-side TCPconnections for server processing. In this intermediate position, thenetwork appliance is in a position to modify the content of the trafficflowing through it, as will be described below.

Routing program 127 may comprise a traffic module 128. Traffic module128 is configured to receive, from client device 110 via wide areanetwork 140, a request for a network resource 160. A network resourcemay refer to a target or a referent of a Uniform Resource Locator (URL)or other suitable Uniform Resource Identifier (URI). For example, anetwork resource may comprise an HTML object, a javascript object, astyle sheet object, a flash object, a media content object such as animage file, a video file, an audio file, a text file, etc. Accordingly,a network resource is itself an object that may be requested by a clientdevice.

A network resource may have one or more references to one or more otherobjects. For example, network resource 160 may have a plurality ofreferences (e.g., 162, 164, 166, etc.) to other objects of networkresource 160 that may be requested and received by the client device.References to objects may include a URL or other suitable URI. As oneexample, a network resource that comprises an HTML object that defines awebpage document may reference one or more other objects (e.g., mediacontent object, javascript object, etc.) that are embedded in thewebpage document, are to be rendered, or executed by the browser programas part of the webpage document. A network resource may have anysuitable number of references to objects, including tens, hundreds,thousands or more references to respective objects.

Traffic module 128 of network appliance 120 is configured to retrievenetwork resource 160 from one or more of server devices 152, 154, 156,etc. via local area network 142. As one example, traffic module 128 mayrequest network resource 160 from server device 156 by sending a requestmessage specifying network resource 160 to server device 156 via localarea network 142. Server device 156 may respond to the request messageby sending network resource 160 to network appliance 120. Networkappliance 120 may store an instance of network resource 160 in a cacheon mass storage 120 or memory 124, for example.

In at least some implementations, traffic module 128 is configured tomodify the network resource to cause the client device that requestedthe network resource to open a greater number of concurrent TCPconnections to the network appliance via the wide area network thanotherwise would have been opened had the network resource not beenmodified, due to the browser imposed limit on concurrent TCP connectionsto a single host or domain. As one example, traffic module 128 isconfigured to parse the network resource retrieved from the one or moreserver devices to identify the plurality of references to the objects,and rewrite at least one or more of the plurality of references to theobjects to specify one or more different references to at least one ormore of the objects to cause the client to open the greater number ofconcurrent TCP connections.

The one or more different references may refer to or indicate one ormore different IP addresses, one or more different host names, and/orone or more different ports. Rewriting the references in this mannerwill cause the browser program to send one or more subsequent requeststo the addresses in the rewritten references with the different IPaddresses, host names, and/or ports. Since the browser imposed limits onconcurrent connections apply to specific host domain/IP address and portcombinations, rewriting references in a manner can be used to avoidreaching the browser imposed limit, thereby increasing or maximizing theconcurrent TCP connections that may be opened to retrieve objectsreferenced in the network resource. For example, each reference may berewritten to have a unique host name/IP address and port combination orat least so that the number of rewritten references in the networkresource that share a common host name/IP address and port combinationwill be at or below the browser imposed limit on concurrent TCPconnections. Typically, the network appliance itself will be configuredas the host server for all of the unique host name/IP address and portcombinations generated in the rewritten references, and is configured toretrieve the objects requested from the backend servers.

Hence, at least one or more of the greater number of concurrent TCPconnections may be opened to the network appliance hosting the hostname/IP address and port combinations of the one or more different,rewritten references. For example, if network resource was requested byclient device 110 via one of ports 123, then network resource 160 may bemodified by traffic module 128 so that client device 110 requests one ormore objects of network resource 160 via a different port 125. As oneexample, if browser program 118 limits or supports a maximum of six (6)concurrent TCP connections to a host or domain, the greater number ofconcurrent TCP connections may include seven (7) or more concurrent TCPconnections to different host name/IP address and port combinationsserved by the network appliance. In this manner higher TCP connectionconcurrence may be achieved, which in turn reduces the dilatory effectof request queuing (e.g., the browser queuing new requests untilresponses from previous requests have been received over the limitednumber of concurrent TCP connections) and TCP transmission rate slowdowndue to detected congestion or packet loss on any one of the connections,on the ultimate rendering of the network resource and all of itsreferenced objects.

In at least some implementations, traffic module 128 is configured toidentify based, at least in part, on cache control header information orobject type information of an object referenced in the network resourcewhether the object is a cacheable object. If the object is identified asa cacheable object, then traffic module 128 is configured to rewrite areference to the object to a first different reference to the cachewhere the object resides. If the object is determined to be anon-cacheable object, then traffic module 128 is configured to rewrite areference indicating a host name of the object to a second differentreference indicating an IP address to the object. Traffic module 128 isconfigured to send the modified or re-written network resource, orredirect message to the client device via the wide area network. Thebrowser program will, in turn, send a request for the object at therewritten IP address. It will be appreciated that this will avoid thebrowser performing a DNS lookup for the original host name address,since a DNS lookup is not required for an IP address. As a result, thebrowser program does not have to initiate the DNS request nor wait forthe DNS response, reducing latency.

In at least some implementations, traffic module 128 is configured toreceive a request from client device 110 for a network resource, andsend a redirect message to client device 110 via wide area network 140to cause client device 110 to request the network resource from one ormore different TCP connections than the initial TCP connection by whichthe initial request for the network resource was received. In this way,a client device may open a greater number of concurrent TCP connectionsthan may otherwise be opened had the client device not been redirected,due to the browser imposed limits on concurrent TCP connections to thesame host/domain and port combination. The redirect message may bewritten, for example, so that client device 110 requests the networkresource from one of ports 125 after initially requesting the networkresource from one of ports 123. The traffic module may be configured tosend redirect messages to a variety of different host name/IP addressand port combinations such that the number of objects at a singlerewritten host name/IP address and port combination does not exceed thebrowser imposed limit for concurrent TCP connections, to therebymaximize parallelism of connections. It will be appreciated that all ofthe host name/IP address and port combinations are typically hosted bythe network appliance.

In at least some implementations, traffic module 128 may include anadministrator interface for enabling an administrative user to turnmodification of network resources or redirecting of client devices on oroff depending on administrator preference. For example, if modificationof network resources is turned off at traffic module 128, then trafficmodule 128 does not rewrite or otherwise modify the network resource,nor does traffic module 128 redirect the client device in order to opena greater number of concurrent TCP connections.

Mass storage 126 of network appliance 120 may further include a datastore. As one example, a data store of mass storage 126 may include arouting table 129. Routing table 129 may define relationships betweenclient-side ports/sockets over which client-side TCP connections areestablished that connect network appliance 120 to clients over wide areanetwork 140 and server-side ports/sockets over which server-side TCPconnections that connect network appliance 120 to back end servers overlocal area network 142. Such ports or sockets are typically softwareconstructs that connect the client program to the server program.Routing table 129 may include a number of virtual network addresses inat least some implementations. For example, traffic module 128 may beconfigured to establish virtual address space (e.g., virtual host names,IP addresses and port combinations) on which the network appliance isconfigured to receive and respond to additional requests from clientdevice 110. Virtual address space may be established by traffic module128 dynamically generating the virtual address space in response toreceiving the request for the network resource from the client device,or by traffic module 128 referencing a pre-defined set or list ofvirtual network addresses to identify the virtual address space. Trafficmodule 128 is configured to listen on one or more ports corresponding tothe virtual network addresses for requests from a client device.

Traffic module 128 is configured to receive a plurality requests forobjects from a client device via wide area network 140 over the greaternumber of concurrent TCP connections. Traffic module 128 is configuredto send the requests to a selected back end server, receive a replyincluding the object from the back end server, and reply to theplurality of requests for the objects by sending the objects to theclient device via the wide area network over the greater number ofconcurrent TCP connections. By increasing concurrency of TCP connectionsin this manner, the network appliance can minimize or reduce the delaysassociated with browser request queuing, and TCP transmission slow downdue to congestion and packet loss discussed above. Traffic module 128may also be configured to perform one or more of the operations,processes, or methods described in greater detail with reference to theflow diagrams of FIGS. 2, 3, and 4.

FIG. 2 is a flow diagram depicting an example method 200 for increasingnetwork connection concurrency according to one disclosed embodiment.Method 200 may comprise a method for network communications among anetwork appliance connectable to a client device via a wide area networkand a server device via a local area network. As one example, method 200may be performed by previously described network appliance 120 executingtraffic module 128. However, other suitable hardware and softwarecomponents may also be used to implement method 200.

At 210, the method includes receiving, from a client device via a widearea network, a request for a network resource having a plurality ofreferences to objects (i.e., object references). At 212, the methodincludes retrieving the network resource from the one or more serverdevices via a local area network or other suitable network. As oneexample, a request message may be sent to the one or more server devicesindicating the network resource requested by the client device. The oneor more server devices may respond to the request message by sending thenetwork resource as one or more response messages. The server device maybe a network appliance acting as a server/load balancer as describedabove, which retrieves the network resource from one of a plurality ofback end servers.

At 214, the method includes establishing virtual address space in orderto receive and respond to subsequent requests traversing at least someof the plurality of references. As one example, establishing virtualaddress space comprises dynamically generating the virtual address space(e.g., one or more virtual network addresses) in response to receivingthe request for the network resource from the client device. As anotherexample, establishing virtual address space comprises referencing apre-defined list of virtual network addresses to identify the virtualaddress space. The virtual network address space may be established by anetwork appliance, as described above.

In at least some implementations, the method at 214 may further include,in response to receiving the request for the network resource from theclient device, determining that network address space is referenced inat least some of the plurality references not currently being served bythe network appliance, and establishing virtual address space in orderto receive and respond to subsequent requests traversing at least someof the plurality of references.

At 216, the method includes modifying the network resource to cause theclient device to open a greater number of concurrent TCP connections tothe network appliance via the wide area network than otherwise wouldhave been opened had the network resource not been modified, due tobrowser program imposed limits on concurrent TCP connections to a singlehost name or IP address and port combination. In at least someimplementations, modifying the network resource comprises parsing thenetwork resource retrieved from the one or more server devices toidentify the plurality of references to the objects, and rewriting oneor more of the plurality of references to specify one or more differentreferences to one or more of the objects to cause the client to open thegreater number of concurrent TCP connections. For example, the one ormore different references may refer to one or more different networklocations including: one or more different IP addresses, one or moredifferent host names, and/or one or more different ports. Accordingly,one or more of the greater number of concurrent TCP connections may beopened to the one or more different network locations referred to by theone or more different references.

In at least some implementations, modifying the network resource at 216may comprise modifying the network resource in response to exceeding athreshold condition with respect to a connection performance parameterof one or more pre-existing TCP connections with the client device overthe wide area network. The connection performance parameter may include,for example, one or more of a round trip time, packet loss, TCP receivewindow, or congestion window. As one example, if the round trip time(e.g., as measured by or at the network appliance) of a pre-existing TCPconnection with the client device exceeds a threshold round trip time orpacket loss exceeds a threshold packet loss, then 216 may be performedto cause the client device to open a greater number of concurrent TCPconnections. As another example, if the TCP receive window for a givenTCP connection (e.g., as measured by or at the client device, andcommunicated to the network appliance) is less than a threshold TCPreceive window or congestion window (e.g., as measured by or at thenetwork appliance) is less than a threshold congestion window, then 216may be performed to cause the client device to open a greater number ofconcurrent TCP connections.

At least some of the one or more different TCP connections may be one ormore pre-existing TCP connections between the client device and thenetwork appliance. However, at least some of the one or more differentTCP connections may be one or more yet to be established TCP connectionsbetween the client device and the network appliance. In at least someimplementations, pre-existing TCP connections may be favored over yet tobe established TCP connections to reduce or avoid an additional amountof time to set up a new TCP connection, and to take advantage of anolder TCP connection being further along or through a TCP slow startphase, which enables the network appliance to send more bytes of datawithout waiting for client ACKs.

In at least some implementations, modifying the network resource at 216may comprise modifying the network resource in response to a number ofthe plurality of references in the network resource exceeding thebrowser program imposed limit on the number of concurrent TCPconnections. As one example, the greater number of concurrent TCPconnections includes seven (7) or more concurrent TCP connections if thebrowser program of the client device imposes a limit of six (6) or fewerconcurrent TCP connections to an individual host name/IP address andport number combination. In at least some implementations, the method at214 and/or 216 may not be performed if the number of references or thenumber of objects referenced in the network resource does not exceed alimit imposed by the browser program on the number of concurrent TCPconnections to an individual host name/IP address and port numbercombination.

In at least some implementations, modifying the network resource at 216may comprise modifying the network resource based, at least in part, onthe number of the plurality of reference in the network resource. Forexample, a number of references in the network resource at 216 may bebased on the limit imposed on the number of concurrent TCP connectionsthat may be opened to an individual host name/IP address and port numbercombination to avoid such a limit imposed on the number of concurrentTCP connections.

In at least some implementations, modifying the network resource at 216may comprise modifying the network resource based, at least in part, onan object type of the network resource requested by the client device oran object type of one or more of the objects referenced in the networkresource. As one example, some object types may be rewritten to a firstdifferent reference and other object types may be rewritten to a seconddifferent reference. As another example, some object types may not berewritten or otherwise modified while other object types may berewritten or otherwise modified.

At 218, the method includes sending the modified network resource to theclient device via the wide area network. At 220, the method includeslistening on one or more ports corresponding to the virtual networkaddresses or other network locations referenced in the modified networkresource for requests from the client device. At least some of theplurality of requests may be received at network locations correspondingto the virtual network space.

The client device may receive the network resource and may requestobjects referenced in the network resource, for example, via a browserprogram of the client device. At 222, the method includes receiving aplurality requests for the objects referenced in the network resourcefrom the client device via the wide area network over the greater numberof concurrent TCP connections. At 224, the method includes replying tothe plurality of requests for the objects by sending the objects to theclient device via the wide area network over the greater number ofconcurrent TCP connections. It will be appreciated that a networkappliance may receive the requests, retrieve the objects from back endservers, and send the replies including the objects to the requestingclients, as described above.

FIG. 3 is a flow diagram depicting an example method 300 according toanother disclosed embodiment. Method 300 may comprise, for example, amethod for a network appliance connected or connectable to a clientdevice via a wide area network and one or more server devices via alocal area network. As one example, method 300 may be performed bypreviously described network appliance 120 executing traffic module 128.However, other suitable hardware and software components may also beused to implement method 300.

At 310, the method includes receiving, from the client device via thewide area network, a request for a network resource having a pluralityof references to respective objects. At 312, the method includesretrieving the network resource from the server device via the localarea network. The method at 310 and 312 may be similar, for example, topreviously described method 200 at 210 and 212, respectively.

At 314, the method includes identifying based, at least in part, oncache control header information or object type information of one ormore objects referenced in the network resource whether each object is acacheable object. The method may include treating the object referencefor a cacheable object in a consistent manner that does not break thecache. For example, if an object is determined at 316 to be a cacheableobject, then at 318, the method includes refraining from rewriting theinitial reference (i.e., maintaining the original object reference).Alternatively, the method at 318 may include rewriting the initialreference to first different reference in a manner that enables thebrowser program to properly cache the object in a browser side cache andretrieve the object from the browser side cache during a currentbrowsing session or a subsequent browsing session. Rewriting the initialreference for a cacheable object may include rewriting the initialreference to the object to a first different reference each and everytime the browser requests that cacheable object during this browsingsession and future browsing sessions, or applying a programmatic rubricto rewrite the initial reference to the object to a network address invirtual network address space that is the same each and every time thecacheable object is requested by the browser program. In at least someimplementations, a reference to a cacheable object that includes a hostname may be rewritten to an IP address each and every time to avoid DNSlookup by a browser program of the client device, and to enable propercatching of the object by the browser program.

If the object is determined at 316 to be a non-cacheable object, thenthe method at 320 includes rewriting the initial reference in thenetwork resource indicating a host name of the object to a seconddifferent reference indicating an IP address to the object. It will beappreciated that by doing so, after the network resource is sent to thebrowser program, the browser program will not have to perform a DNSlookup in order to retrieve the object at the rewritten reference, sinceDNS lookups are not required for IP addresses. Accordingly, processingtime or delay associated with performing the DNS lookup may be avoidedor reduced in some examples. In other examples, however, the initialreference may be rewritten to any suitable network location includinghost names or domain names.

The method at 314 may further include identifying a change of the cachecontrol header information of the object indicating a change from anon-cacheable object to a cacheable object, and rewriting the seconddifferent reference to the first different reference or the initialreference in response to identifying the change. In this way, a browserprogram of the client device may properly maintain caching of theobject.

At 322, the method includes sending one of the initial reference, thefirst different reference, or the second different reference to theclient device via the wide area network. The client device receives oneof the initial reference, the first different reference, or the seconddifferent reference via the wide area network, and may send a requestfor the object by traversing the initial reference, the first differentreference, or the second different reference via the wide area network.At 324, the method includes receiving a request for the object at one ofthe initial reference, the first different reference, or the seconddifferent reference from the client device via the wide area network. At326, the method includes replying to the request for the object bysending the object to the client device via the wide area network.

As previously described with reference to 314-320 of method 300 of FIG.3, the different references that are rewritten for objects may be based,at least in part, on cache control header information or object typeinformation identified from objects referenced in the network resource.In at least some implementations, previously described method 200 ofFIG. 2 may further comprise identifying based, at least in part, oncache control header information or object type information of an objectreferenced in the network resource whether the object is a cacheableobject. If the object is a cacheable object, then 216 of method 200 mayfurther comprise modifying the network resource in a manner that enablesproper caching of the object as previously discussed. If the object is anon-cacheable object, then method 200 may include modifying the networkresource to indicate an IP address corresponding to a network locationwhere the object resides, which will enable the browser program toretrieve the object by traversing the IP address without performing aDNS lookup for the IP address of the network location, thereby reducinglatency.

FIG. 4 is a flow diagram depicting an example method 400 according toyet another disclosed embodiment. Method 400 may comprise, for example,a method for a network appliance connected or connectable to a clientdevice via a wide area network and one or more server devices via alocal area network. As one example, method 400 may be performed bypreviously described network appliance 120 executing traffic module 128.However, other suitable hardware and software components may also beused to implement method 400.

At 410, the method includes receiving, from the client device via thewide area network, an initial request for a network resource having aplurality of references to respective objects. At 412, the methodincludes retrieving the network resource from the server device via thelocal area network. The method at 410 and 412 may be similar, forexample, to previously described method 200 at 210 and 212,respectively.

At 414, the method includes sending the network resource to the clientdevice via the wide area network. In at least some implementations, atleast some of the references in the network resource may be modified aspreviously described with reference to method 200 of FIG. 2, forexample. However, in at least some implementations, the network resourcemay be sent to the client device without modifying references in thenetwork resource. The client device may receive the network resource andrequest the respective objects by traversing the references (whethermodified or unmodified) in the network resource.

At 416, the method includes receiving, from the client device via thewide area network, a plurality of initial requests for the objectsreferenced in the network resource by the plurality of references. Inresponse to receiving the initial requests from the client device, thenetwork appliance may request and receive the respective objects fromone or more backend server devices, for example, as previously describedat 212 of FIG. 2.

At 418, the method includes identifying based, at least in part, oncache control header information or object type information of an objectreferenced in the network resource by the plurality of referenceswhether the object is a cacheable object. As one example, the networkappliance may parse HTTP GET messages received from the client device orHTTP 200 OK messages received from the backend server devices thataccompany the objects for the cache control header information or objecttype information.

If an object is determined at 420 to be a cacheable object, then themethod at 422 includes generating a redirect message to refer to aprevious network location from which the client device previouslyrequested and received the object. The redirect message may be generatedto provide the previous network location to the client device in amanner that enables a browser program of the client device to properlyretrieve the object from the browser side cache.

If an object is determined at 420 to be a non-cacheable object, then themethod at 422 includes generating a redirect message to refer to an IPaddress of a different network location than the previous networklocation to cause a browser program to retrieve the object from the IPaddress via a different TCP connection of the one or more different TCPconnections without performing a DNS lookup for the IP address of thedifferent network location.

At 426, the method includes in response to receiving the plurality ofinitial requests from the client device, sending one or more of theredirect messages generated at 422 or 424 to the client device via thewide area network to cause the client device to subsequently request oneor more of the objects via the wide area network over one or moredifferent TCP connections than one or more initial TCP connections bywhich the plurality of initial requests were received. An example of aredirect message is an HTTP 302 redirect message. The one or moreredirect messages may indicate respective network locations to be usedby the client device with which to establish one or more different TCPconnections. The one or more different references refer to one or moredifferent network locations including: one or more different IPaddresses, one or more different host names, and/or one or moredifferent ports, for example, as previously described.

One or more of the greater number of concurrent TCP connections may beopened to the one or more different network locations referred to by theone or more different references. By generating redirect messages forone or more of the plurality of references to specify one or moredifferent references to the one or more of the objects, the client canopen a greater number of concurrent TCP connections to the networkappliance via the wide area network than otherwise would have beenopened had the one or more redirect messages not been sent to the clientdevice due to a browser program imposed limit on a number of concurrentTCP connections. As previously described, at least some of the one ormore different TCP connections may include one or more pre-existing TCPconnections between the client device and the network appliance to avoidTCP setup time or reduce the number of new TCP connections establishedwith the network appliance by the client device.

At 428, the method includes receiving one or more subsequent requestsfor the one or more objects from the client device via the wide areanetwork over the one or more different TCP connections. In response toreceiving the requests for the one or more objects from the clientdevice, the networking appliance may request and receive the one or moreobjects from one or more backend servers. At 430, the method includesreplying to the subsequent requests for the one or more objects bysending the one or more objects to the client device via the wide areanetwork over the one or more different TCP connections.

In at least some implementations, sending the one or more redirectmessages to the client device may comprise sending a redirect message ofthe one or more redirect messages to the client device based, at leastin part, on an object type of an object requested by the client device.For example, as previously described, objects may be redirecteddifferently based on cache control information. In at least someimplementations, sending the one or more redirect messages to the clientdevice may be performed in response to the client device exceeding athreshold condition with respect to a connection performance parameterof one or more pre-existing TCP connections with the client device overthe wide area network. The connection performance parameter may include,for example, one or more of a round trip time, packet loss, TCP receivewindow, or congestion window.

In at least some implementations, in response to receiving the requestfor the network resource from the client device, the method at 210 mayfurther include determining that network address space is referenced inat least some of the plurality references not currently being served bythe network appliance, and establishing virtual address space in orderto receive and respond to the one or more subsequent requests traversingeach of the at least some of the plurality of references. As previouslydescribed, establishing virtual address space may include dynamicallygenerating the virtual address space in response to receiving therequest for the network resource from the client device, or referencinga pre-defined list of virtual network addresses to identify the virtualaddress space.

FIG. 5 depicts an example of an initial HTML file of a network resourcehaving a number of object references that may be modified, for example,by a network appliance rewriting at least some of the object referencesto obtain the example rewritten HTML file of FIG. 6. The rewritten HTMLof FIG. 6 includes a number of different host name/IP address and/orport combinations to avoid browser imposed concurrent TCP connectionlimits. The initial HTML file of FIG. 5 includes a number of objectreferences 510-540. The rewritten HTML file of FIG. 6 includes a numberof object references 610-640 that have been rewritten, for example, by anetwork appliance as previously described. The example rewrittenportions of the object references are depicted in bold font in FIG. 6.

As one example, object reference 618 has been rewritten from objectreference 518 to include IP address “216.100.224.98”. As anotherexample, object reference 622 has been rewritten from object reference522 to include TCP port number “8080”. Object references 626-634 havealso been rewritten to include TCP port number “8080”. As anotherexample, object reference 636 has been rewritten from object reference536 to include TCP port number “8081”. As yet another example, objectreference 638 has been rewritten to include host name portion “i2”rather than the initial host name portion “i” of 538. Object reference640 has been rewritten from object reference 540 to include both adifferent host name and a different port number. The rewritten portionsof the network resource depicted in FIG. 6 have six (6) or less objectreferences of a particular host name/IP address and/or port combination,thereby avoiding a browser imposed limit of six (6) concurrent TCPconnections to an individual host name/IP address and/or portcombination. Accordingly, the example rewritten object referencesdepicted in FIG. 6 enable a greater number of concurrent TCP connectionsto be opened by a client device than otherwise would have been openedhad the object references not been modified.

FIG. 7 depicts an example network flow diagram according to a disclosedembodiment in which an initial request by a client device for acacheable object referenced in a network resource is received by anetwork appliance and processed according to the previously describedmethod implementations. In FIG. 7, a client device sends a request foran object as an HTTP GET message 710 to a network appliance. As oneexample, the network resource may refer to the HTML file of FIG. 5. Thenetwork appliance receives HTTP GET message 710 sent by the clientdevice and in response, sends an HTTP GET message 712 to a server devicehosting the requested object. Messages 710 and 712 are identical in thisparticular example.

The server device receives HTTP GET message 712 from the networkappliance and in response, sends the object to the network applianceaccompanied by an HTTP 200 OK message 714. The network appliancereceives HTTP 200 OK message 714 from the server device, and at 716identifies the object as a cacheable object based on the contents ofHTTP 200 OK message 714. For example, HTTP 200 OK message 714 includes“cache-control” information indicating that the object is a cacheableobject. Because the client device has requested a cacheable object, thenetwork appliance continues to deliver network resources that referencethis object without modifying the reference. However, as previouslydescribed, the network resource may alternatively rewrite references tocacheable objects in a consistent manner each time the network resourceis requested in order to avoid breaking the cache on the client-side.

The network appliance sends the initially requested object to the clientdevice accompanied by an HTTP 200 OK message 718. HTTP 200 OK message718 is identical to HTTP 200 OK message 714 in this particular example.However, as previously described, the network appliance mayalternatively redirect the client device to another network locationfrom which the object may be requested in a consistent manner each timethe object is requested in order to avoid breaking the cache on theclient-side. The client device receives the object and HTTP 200 OKmessage 718. The object may be cached by the client device in accordancewith the cache control information of HTTP 200 OK message 718.

FIG. 8 depicts an example network flow diagram according to a disclosedembodiment in which a network appliance receives an initial request foran object referenced in a network resource that is identified as anon-cacheable object. In FIG. 8, a client device sends an HTTP GETmessage 810 for the object by traversing the network location referencedin the network resource. The network appliance receives HTTP GET message810 sent by the client device and in response, sends an HTTP GET message812 to a server device. The server device receives HTTP GET message 812from the network appliance and in response, sends the network resourceas an HTTP 200 OK message 814 accompanying the object to the networkappliance.

The network appliance receives HTTP 200 OK message 814 from the serverdevice. The network appliance identifies the object as a non-cacheableobject at 816 based on cache control information of HTTP 200 OK message814. Because the object has been identified as a non-cacheable object,the network resource may rewrite the network resource that referencedthe non-cacheable object in response to subsequent requests for thenetwork resource by the client device. The network resource may send theobject to the client device accompanied by HTTP 200 OK message 818.Alternatively, the network appliance may redirect the client device to anetwork location where the object may be retrieved, even in response toan initial request for the object, since the object has been identifiedas a non-cacheable object. For example, the network resource mayredirect the client device to an IP address instead of the original hostname.

FIG. 9 depicts an example network flow diagram according to a disclosedembodiment in which a network appliance receives a subsequent requestfor a non-cacheable object referenced in a network resource, such asafter receiving and responding to the request for the non-cacheableobject of FIG. 8, for example. In FIG. 9, a client device sends an HTTPGET message 910 for the non-cacheable object to the network appliance.In this example, HTTP GET message 910 includes reference to IP address“216.100.224.98” that was rewritten from host name “ExampleUrl.com”. Thenon-cacheable object of the rewritten network resource in this examplemay correspond to previously described reference 620 of FIG. 6 that hasbeen rewritten from reference 520 of FIG. 5. The reference to the objectin the network resource may be rewritten by the network appliance toinclude the IP address instead of original host name to avoid subsequentbrowser DNS lookup by the client device.

The network appliance receives HTTP GET message 910 sent by the clientdevice and in response, sends an HTTP GET message 912 to a serverdevice. The server device receives HTTP GET message 912 from the networkappliance and in response, sends the network resource to the networkappliance accompanied by an HTTP 200 OK message 914. The networkappliance receives HTTP 200 OK message 914 from the server device, andidentifies the network resource as a non-cacheable object at 916.Because the client's request for the network resource is a subsequentrequest for the object, the reference to the object in the networkresource has been rewritten. The network appliance sends the initiallyrequested network resource to the client device accompanied by HTTP 200OK message 918. The client device receives HTTP 200 OK message 918accompanying the object. Alternatively, the network resource mayredirect the client device to another network location from which thenon-cacheable object may be requested.

Accordingly, a difference between cacheable and non-cacheable objects(in at least some implementations) is that the network appliance mayrewrite a reference in a network resource to a non-cacheable object todifferent network locations for subsequent requests made by the clientdevice for the network resource, or may redirect the client device todifferent network locations for subsequent requests for the object. Incontrast, references to cacheable objects may be maintained or rewrittento the same network location each and every time, or the client devicemay be redirected to the same network location each and every time toenable the browser program of the client device to maintain propercaching of the object.

It should be understood that the embodiments herein are illustrative andnot restrictive, since the scope of the invention is defined by theappended claims rather than by the description preceding them, and allchanges that fall within metes and bounds of the claims, or equivalenceof such metes and bounds thereof are therefore intended to be embracedby the claims.

1. A method for network communications among a network applianceconnectable to one or more client devices via a wide area network andone or more server devices via a local area network, the methodcomprising, at the network appliance: receiving, from a client device ofthe one or more client devices via the wide area network, a request fora network resource having at least a first reference to a first object;retrieving the network resource from the one or more server devices viathe local area network; identifying the first object as a non-cacheableobject from cache control header information or object type informationof the network resource for the first object; modifying the networkresource by rewriting the first reference to the first object identifiedas the non-cacheable object to specify a different reference to thefirst object; and sending the modified network resource having therewritten first reference to the client device via the wide areanetwork.
 2. The method of claim 1, wherein the network resource has atleast a second reference to a second object, the method furthercomprising: identifying the second object as a cacheable object fromcache control header information or object type information of thenetwork resource for the second object; wherein sending the modifiednetwork resource includes sending the modified resource withoutmodifying the second reference to the second object identified as thecacheable object.
 3. The method of claim 1, wherein the network resourcehas at least a second reference to a second object, the method furthercomprising: identifying the second object as a cacheable object fromcache control header information or object type information of thenetwork resource for the second object; wherein modifying the networkresource further includes modifying the network resource by rewritingthe second reference to the second object identified as the cacheableobject to specify a different reference to the second object that isconsistent across all sessions for the client device to enable cachingof the cacheable object; wherein sending the modified network resourceincludes sending the modified network resource having the rewrittenfirst reference and the rewritten second reference to the client devicevia the wide area network.
 4. The method of claim 1, wherein modifyingthe network resource comprises: parsing the network resource retrievedfrom the one or more server devices to identify each reference to arespective object, including at least the first reference to the firstobject.
 5. The method of claim 4, wherein each reference refers to arespective different network location including one or more of: an IPaddress, a host name, and/or a port.
 6. The method of claim 1, whereinthe different reference to the first object is selected to increase anumber of concurrent TCP connections that are opened by the clientdevice.
 7. The method of claim 6, wherein the number of concurrent TCPconnections is increased beyond a browser imposed limit of concurrentTCP connections as a result of said modifying.
 8. The method of claim 1,further comprising: in response to receiving the request for the networkresource from the client device, determining that network address spaceis referenced in at least some references not currently being served bythe network appliance; and establishing virtual address space in orderto receive and respond to subsequent requests traversing at least someof the references.
 9. The method of claim 8, wherein establishingvirtual address space further comprises: dynamically generating thevirtual address space in response to receiving the request for thenetwork resource from the client device; or referencing a pre-definedlist of virtual network addresses to identify the virtual address space.10. The method of claim 1, wherein modifying the network resourcecomprises: modifying the network resource in response to exceeding athreshold condition with respect to a connection performance parameterof one or more pre-existing TCP connections with the client device overthe wide area network; wherein the connection performance parameterincludes one or more of a round trip time, packet loss, TCP receivewindow, or congestion window.
 11. The method of claim 1, whereinmodifying the network resource comprises: modifying the network resourcefurther in response to a number of references in the network resourceexceeding a browser program imposed limit on a number of concurrent TCPconnections; or modifying the network resource further based, at leastin part, on a number of references to respective objects in the networkresource.
 12. A network appliance connected or connectable to one ormore client devices via a wide area network and one or more serverdevices via a local area network, the network appliance comprising: oneor more processors; and mass storage including a routing programexecutable by the one or more processors to: receive, from a clientdevice of the one or more client devices via the wide area network, arequest for a network resource having at least a first reference to afirst object; retrieve the network resource from the one or more serverdevices via the local area network; identify the first object as anon-cacheable object from cache control header information or objecttype information of the network resource for the first object; modifythe network resource by rewriting the first reference to the firstobject identified as the non-cacheable object to specify a differentreference to the first object; and send the modified network resourcehaving the rewritten first reference to the client device via the widearea network.